<?php
// +----------------------------------------------------------------------
// | LIKE [ JUST DO IT ]
// +----------------------------------------------------------------------
// | Author: Mr.hu <huhaiyang7788@163.com>
// +----------------------------------------------------------------------
// | DESC: 当接口调用结束之后记录接口调用的情况
// +----------------------------------------------------------------------


namespace common\behavior;


use common\controllers\Functions;
use yii\base\Behavior;
use yii\base\Controller;

class EndBehavior extends Behavior
{

    /**
     * 定义记录日志发生的时间
     * return array
     * @ Mr.hu.
     */
    public function events()
    {
        return [
            Controller::EVENT_AFTER_ACTION=>'afterAction',
        ];
    }


    public function afterAction($event)
    {

        //action最后的返回的结果
        $return_response_data=$event->result;

        //完整的控制器名称
        $controller_name=get_class($event->action->controller);

        //获取方法名字
        $action_name=$event->action->actionMethod;

        //接口调用是否成功，就看commonapi的error消息是否为空就行了。如果这里空，表示接口调用成功，直接决定接口调用的正确定
        $is_ok=is_null($event->action->controller->error);

        //处理前的数据
        $request_data=$event->action->controller->request_data;

        //解析之后的数据
        $processed_data=$event->action->controller->processed_data;

        //请求接口的完整地址
        $full_url=\Yii::$app->request->getAbsoluteUrl();

        //请求接口的客户端ip地址
        $ip_address=\Yii::$app->request->getUserIP();

        //客户端的浏览器信息
        $user_agent=\Yii::$app->request->getUserAgent();

        //action执行时间
        $exec_time=microtime(true)-$event->action->controller->start_time;

        //结束使用内存
        $exec_memory=memory_get_usage()-$event->action->controller->start_memory;
        $exec_memory=bcdiv($exec_memory,1024*1024,2);

        //最大内存使用情况
        $max_used_memory=bcdiv(memory_get_peak_usage(),1024*1024,2);

        //请求接口的时间
        $request_datetime=$event->action->controller->request_datetime;

        //以下开始记录api的调用情况
        $mongo_log = [
            'return_response_data'=>$return_response_data,
            'controller_name'=>$controller_name,
            'action_name'=>$action_name,
            'is_ok'=>$is_ok,
            'request_data'=>$request_data,
            'processed_data'=>$processed_data,
            'full_url'=>$full_url,
            'ip_address'=>$ip_address,
            'user_agent'=>$user_agent,
            'exec_time'=>$exec_time,
            'exec_memory'=>$exec_memory,
            'max_used_memory'=>$max_used_memory,
            'request_datetime'=>$request_datetime,
        ];
        Functions::addMongoData($mongo_log);
    }



}